﻿import { RedDotType } from '../../../Data/Types';

/** 红点运算单元信息类 */
export class RedDotUnitInfo {
  /** 红点运算单元类型 */
  redDotUnit: string;

  /** 红点运算单元对应显示的红点类型 */
  redDotType: RedDotType;

  /** 直接影响的红点 */
  // onlyRedDotName: string;

  /** 影响的红点名列表 */
  redDotNameLsit: Array<string>;

  /** 参数 */
  param: string;

  /** 红点运算单元对应红点计算回调 */
  calculateFunc: (param?: string) => number;

  /**
   * 构造函数
   * @param redDotUnit 红点运算单元类型
   * @param redDotType 红点显示类型
   * @param calculateFunc 红点数据计算方法
   * @param param 参数
   */
  constructor(redDotUnit: string, redDotType: RedDotType, calculateFunc: () => number, param: string) {
    this.redDotUnit = redDotUnit;
    this.redDotType = redDotType;
    this.calculateFunc = calculateFunc;
    this.redDotNameLsit = new Array<string>();
    this.param = param;
  }

  /**
   * 执行红点数据计算方法
   */
  execute() {
    this.calculateFunc(this.param);
  }

  /**
   * 添加影响的红点名
   * @param redDotName 红点名
   * @returns 是否成功添加
   */
  addRedDotName(redDotName: string): boolean {
    if (this.redDotNameLsit.indexOf(redDotName) < 0) {
      this.redDotNameLsit.push(redDotName);
      return true;
    }
    // Debug.LogError($"红点运算单元:{RedDotUnit.ToString()}重复添加影响红点名:{redDotName}");
    return false;
  }

  /**
   * 移除影响的红点名
   * @param redDotName 红点名
   * @returns 是否成功移除
   */
  removeRedDotName(redDotName: string): boolean {
    const ind = this.redDotNameLsit.indexOf(redDotName);
    if (ind < 0) {
      // Debug.LogError($"红点运算单元:{RedDotUnit.ToString()}未添加影响红点名:{redDotName},移除失败!");
      return false;
    }
    this.redDotNameLsit.splice(ind, 1);
    return true;
  }
}
